import request from "@/utils/request"; // 引入已封装的Axios实例
// src\uitls\request.js
/**
 * 员工信息类型定义（用于TypeScript类型提示，JavaScript可省略）
 */
export const StaffType = {
  // 基本信息
  guid: String,
  id: String,
  name: String,
  // 关联数据
  qualifications: {
    qualifications: Array,
    qualificationIds: Array,
  },
  organizations: {
    organizations: Array,
    organizationsIds: Array,
  },
  groups: {
    groups: Array,
    groupIds: Array,
  },
  availableSeats: {
    availableSeats: Array,
    availableSeatIds: Array,
  },
  marks: {
    marks: Array,
    markIds: Array,
  },
  temporaryRoles: Array,
};

/**
 * 筛选条件参数类型
 * @property {string[]} organizations - 部门ID数组
 * @property {string[]} qualifications - 资质ID数组
 * @property {string[]} groups - 班组ID数组
 * @property {string[]} availableSeats - 席位ID数组
 * @property {object} temporaryRoles - 临时角色筛选
 * @property {string[]} temporaryRoles.qualifications - 临时资质ID数组
 * @property {string[]} temporaryRoles.organizations - 临时组织ID数组
 * @property {string[]} temporaryRoles.availableSeats - 临时席位ID数组
 */

/**
 * 1. 查询员工列表
 * @param {object} params - 查询参数
 * @param {string[]} [params.organizations] - 部门筛选（ID数组）
 * @param {string[]} [params.qualifications] - 资质筛选（ID数组）
 * @param {string[]} [params.groups] - 班组筛选（ID数组）
 * @param {string[]} [params.availableSeats] - 席位筛选（ID数组）
 * @param {object} [params.temporaryRoles] - 临时角色筛选
 * @param {string} [params.type='list'] - 输出类型：list/detail
 * @param {boolean} [params.all=false] - 是否查询所有员工（忽略筛选）
 * @returns {Promise} - 响应数据
 */
export const getStaffList = (params = {}) => {
  // 处理数组参数为逗号分隔字符串（适配URL查询参数格式）
  const query = { ...params };
  if (Array.isArray(query.organizations)) {
    query.organizations = query.organizations.join(",");
  }
  if (Array.isArray(query.qualifications)) {
    query.qualifications = query.qualifications.join(",");
  }
  if (Array.isArray(query.groups)) {
    query.groups = query.groups.join(",");
  }
  if (Array.isArray(query.availableSeats)) {
    query.availableSeats = query.availableSeats.join(",");
  }
  // 临时角色筛选需转为JSON字符串
  if (query.temporaryRoles && typeof query.temporaryRoles === "object") {
    query.temporaryRoles = JSON.stringify(query.temporaryRoles);
  }

  return request({
    url: "/staff_api.php",
    method: "get",
    params: query,
  });
};

/**
 * 2. 创建员工（单个或批量）
 * @param {object|object[]} data - 员工数据（单个对象或数组）
 * @returns {Promise} - 响应数据
 */
export const createStaff = (data) => {
  return request({
    url: "/staff_api.php",
    method: "post",
    data,
  });
};

/**
 * 3. 更新员工（单个或批量）
 * @param {object|object[]} data - 员工数据（必须包含guid，单个对象或数组）
 * @returns {Promise} - 响应数据
 */
export const updateStaff = (data) => {
  return request({
    url: "/staff_api.php",
    method: "put",
    data,
  });
};

/**
 * 4. 快捷查询：获取所有员工完整信息
 * @returns {Promise} - 响应数据
 */
export const getAllStaffDetails = () => {
  return getStaffList({
    all: true,
    type: "detail",
  });
};

/**
 * 5. 快捷查询：获取所有员工基本列表
 * @returns {Promise} - 响应数据
 */
export const getAllStaffBasic = () => {
  return getStaffList({
    all: true,
    type: "list",
  });
};

/**
 * 6. 删除员工（单个或批量）
 * @param {object|object[]} data - 员工数据（必须包含guid，单个对象或数组）
 * @returns {Promise} - 响应数据
 */
export const deleteStaff = (data) => {
  return request({
    url: "/staff_api.php",
    method: "delete",
    data,
  });
};

/**
 * 7. 快捷删除：根据GUID删除单个员工
 * @param {string} guid - 员工GUID
 * @returns {Promise} - 响应数据
 */
export const deleteStaffByGuid = (guid) => {
  return deleteStaff({ guid });
};

export default {
  getStaffList,
  createStaff,
  updateStaff,
  deleteStaff, // 新增
  deleteStaffByGuid, // 新增
  getAllStaffDetails,
  getAllStaffBasic,
};
